package com.hongyun.tms.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hongyun.tms.common.PageResponseDto;
import com.hongyun.tms.common.dto.prodplan.*;
import com.hongyun.tms.common.vo.ProPlanVO;
import com.hongyun.tms.entity.ProdPlan;

import java.util.List;

/**
 * <p>
 * 作业计划 服务类
 * </p>
 *
 * @author liPeng
 * @since 2024-06-12
 */
public interface IProdPlanService extends IService<ProdPlan> {

    /**
     * 与V1的区别是，加了个tugId，筛选，直接改成sql语句查询了
     *
     * @param query query
     * @return page
     */
    PageResponseDto<ProPlanVO> treeList(ProPlanQueryDto query);

    /**
     * 新增或更新作业计划
     *
     * @param dto 作业计划数据传输对象，包括作业计划信息和子项（拖轮信息）。
     */
    void saveOrUpdatePlan(ProPlanSaveReqDto dto);

    /**
     * 批量审核/反审核
     *
     * @param dto paramList
     */
    void approveBatch(ProPlanApproveBatchReqDto dto);

    ProPlanVO detail(Long id);

    /**
     * 拖轮计费
     * <p>
     * 1、根据计划中的shipId，找寻船舶
     * 2、找到船舶后，根据大船规范里的船长度shipLength
     * 3、到拖轮费率里，根据shipLength处于哪个范围，获取到“费率”字段，更新到这个计划的amount中
     * 4、计算完成后，更新plan的状态为2已计费
     *
     * @param dtoList dtoList
     */
    void tugCalculateFee(List<TugCalculateFeeReqDto> dtoList);

    String totalAmount(ProPlanQueryDto query);

    //作业计划导出
    List<ProPlanExportDto> exportPlanList(ProPlanQueryDto query);
}
